# 描述
# 判断给定的链表中是否有环。如果有环则返回true，否则返回false。
# 你能给出空间复杂度的解法么？
# 输入分为2部分，第一部分为链表，第二部分代表是否有环，
# 然后回组成head头结点传入到函数里面。-1代表无环，其他的数字代表有环，这些参数解释仅仅是为了方便读者自测调试

# 输入：
# {3,2,0,-4},1
# 返回值：
# true
# 说明：
# 第一部分{3,2,0,-4}代表一个链表，第二部分的1表示，-4到位置1，即-4->2存在一个链接，组成传入的head为一个带环的链表 ,返回true  


#链表判断是否有环，利用快慢指针在链表上运动，只要有环，两者终会相遇，无环则快指针先到链表结尾
class Solution:
    def hasCycle(self , head ):
        # write code here
        if head==None:
            return False
        fast=head
        slow=head
        #当快指针的自身，next，next都不指向None，前一个很好理解，后两个主要是为了保证while内的循环体不会报错
        while fast!=None and fast.next!=None and fast.next.next!=None:
            fast=fast.next
            fast=fast.next
            slow=slow.next
            if fast==slow:
                return True
        return False
